// librerie.cpp : Defines the entry point for the console application.
//
/*
lista vuota,ultimo nodo,inseirsci in coda stampa lista,dealloca,ricerca,inserisici in testa
*/
#include "stdafx.h"
#include <iostream>
#define LEN 20
using namespace std;
typedef struct{
	char nome[LEN + 1];
	char cognome[LEN + 1];
	int n;
}ALUNNO;
typedef struct NODO {
	ALUNNO alunno;
	struct NODO *next;
}NODO;

bool lista_vuota(NODO*nt);//lista vuota
NODO *ultimo_ (NODO*nt);//ultimo elemento
NODO*inserisci_coda(NODO*nt);//inserieci in coda
NODO*alloca_();//alloca
void stampa(NODO*nt);//stampa
void dealloca(NODO*nt);//dealloca
bool trova(NODO*nt,NODO*e);//trova
void ricerca(NODO*nt);//trova
NODO*inserisci_testa(NODO*nt);//inserisci in testa

int main()
{
    return 0;
}
bool lista_vuota(NODO*nt) {
	if (nt == NULL) {
		return true;
	}
	else{
		return false;
	}
}
NODO *ultimo_(NODO*nt) {
	NODO*ultimo;//creo variabile temoranea
	ultimo = nt;//ultimo è ugguale al nodo
	while (ultimo->next != NULL) {//faccio il ciclo fino a quando ultimo è ugguale a null
		ultimo = ultimo->next;//porto ultimo al puntatorre precedente
	}
	return ultimo;//ritorno ultimo
}
NODO*inserisci_coda(NODO*nt) {
	
	NODO*nuovo; //dichiaro un nuovo nodo
	NODO*ultimo;//dichiaro l'ultimo nodo
	if (lista_vuota(nt) == true) {
		nuovo = alloca_();
		//carico il nodo
		return nuovo;
		
	}
	ultimo = ultimo_(nt);//trovo il primo nodo
	nuovo = alloca_();//rovo il secondo nodo
	//carca dati
	ultimo->next = nuovo;
	return nt;

}
NODO*alloca_() {
	NODO*nuovo;
	nuovo = (NODO*)malloc(sizeof(NODO));
	nuovo->next = NULL;
	if (nuovo == NULL) {
		printf("errore!!\n");
		return 0;
	}
	return nuovo;
}
void stampa(NODO*nt) {
	NODO*p;//creo una variabile temporanea 
	int cont = 0;//creo un contatore
	p = nt;//associo alla variabile temporeanea il valore di nt
	while (p != NULL) {
		//printf("NODO: %d\n nome %s\n, prezzo %d\n,quantità %d\n ", cont, p->scontrino.nome_prodotto, p->scontrino.prezzo, p->scontrino.quantia);
		//stampo i campi
		p = p->next;//porto p al puntatore sucessivo
		cont++;//aumento il cont

	}
}
void dealloca(NODO*nt) {
	NODO*p;
	if (lista_vuota(nt) == true) {
		printf("la lista è vuota");
	}
	else{
		while (nt != NULL) {
			p = nt;//porto p a nt
			nt = p->next; //metto nt al valore di p
			free(p);//liero p
			p = NULL;//porto p=null

		}
	}
}
bool trova(NODO*nt, NODO*e) {
	char campo[] = { "giovanni" };
	NODO*p;
	p = nt;
	while (p != NULL) {
		if (strcmp(campo, p->alunno.nome) == 0) {
			break;
			e = p;
			return true;
		}
		else {
			return false;
		}
	}

}
void ricerca(NODO*nt) {
	NODO*e;
	if (trova(nt, e) == true) {
	   //stampo i campi
	}
	else{
		printf("NON  TROVATO\n");
	}
}
NODO*inserisci_testa(NODO*nt) {
	NODO*nuovo;
		if (lista_vuota(nt) == true) {
			nuovo = alloca_();
			//carico il nodo
			return nuovo;

		}
		else {
			nuovo = alloca_();
			nuovo->next = nt;
			//leggo i dati 
			return nuovo;
		}
}